//package com.gradle.quartz.config;
//
//import com.gradle.quartz.bean.User;
//import org.springframework.batch.core.Job;
//import org.springframework.batch.core.Step;
//import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing;
//import org.springframework.batch.core.configuration.annotation.JobBuilderFactory;
//import org.springframework.batch.core.configuration.annotation.StepBuilderFactory;
//import org.springframework.batch.core.launch.support.RunIdIncrementer;
//import org.springframework.batch.core.step.tasklet.Tasklet;
//import org.springframework.batch.item.ItemWriter;
//import org.springframework.batch.item.file.FlatFileItemReader;
//import org.springframework.batch.item.file.builder.FlatFileItemReaderBuilder;
//import org.springframework.batch.item.validator.BeanValidatingItemProcessor;
//import org.springframework.batch.repeat.RepeatStatus;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.context.annotation.Bean;
//import org.springframework.context.annotation.Configuration;
//import org.springframework.core.io.ClassPathResource;
///**
// * 逻辑现有两条
// * 第一条普通任务 job ---> step ---> tasklet
// * 第二条：要读取文件
// * job ---> step ---> chunk ---> reader ----> writer
// * @author ldanniel
// */
//@EnableBatchProcessing
//@Configuration
//public class FlatBatchConfig {
//    @Autowired
//    private JobBuilderFactory jobBuilderFactory;
//    @Autowired
//    private StepBuilderFactory stepBuilderFactory;
//
//    @Bean
//    public ItemWriter<User> writer() {
//        return items -> {
//            int index = 0;
//            for (User item : items) {
//                System.out.println("打印item 第 " + (index++) + "个  信息为："+item);
//            }
//        };
//    }
//    @Bean
//    public UseFieldMapper useFieldMapper(){
//        return new UseFieldMapper();
//    }
//
//    @Bean
//    public BeanValidatingItemProcessor<User> beanValidatingItemProcessor() {
//        System.out.println("---------------执行参数校验------------------");
//        BeanValidatingItemProcessor<User> processor = new BeanValidatingItemProcessor<>();
//        //不满足条件丢弃
//        processor.setFilter(true);
//        return processor;
//    }
//
//    /**
//     * 读取平面文件
//     *
//     * @return FlatFileItemReader<User>
//     */
//    @Bean
//    public FlatFileItemReader<User> reader() {
//        return new FlatFileItemReaderBuilder<User>()
//                .name("userItemReader")
//                .resource(new ClassPathResource("/file/user.txt"))
//                //指定解析器，使用#分割，默认是用,号
//                .delimited().delimiter("#")
//                //截取数据之后，数据怎么命名
//                .names("id", "userName", "age","province","city","area")
//                //将解析的数据封装到User对象中
////                .targetType(User.class) 自动封装
//                .fieldSetMapper(useFieldMapper())
//                .build();
//    }
//
//
//    /**
//     * 处理任务的逻辑对象
//     *
//     * @return Tasklet
//     */
//    @Bean
//    public Tasklet taskLet() {
//        return (contribution, chunkContext) -> {
//            System.out.println(">>>>>>>>>处理任务的逻辑对象【Tasklet】>>>>>>>>");
//            return RepeatStatus.FINISHED;
//        };
//    }
//
//    @Bean
//    public Step step() {
//        System.out.println(">>>>>>>>>tasklet要执行step的逻辑 类似Thread的runnable【Step】>>>>>>>>");
//        return stepBuilderFactory.get("step1")
//                //一次性读多少数据,以及数据类型为User
//                .<User,User>chunk(1)
//                .reader(reader())
//                //参数校验
//                .processor(beanValidatingItemProcessor())
//                .writer(writer())
//                .build();
//    }
//
//    @Bean
//    public Job job() throws Exception {
//        System.out.println(">>>>>>>>>任务启动执行对象【Job】>>>>>>>>");
//        return jobBuilderFactory.get("valid1-processor-job")
//                .start(step())
//                .incrementer(new RunIdIncrementer())
//                .build();
//    }
//}
